#include <stdint.h>
#include <stdlib.h>
-#include "babl.h"
+#include "babl-internal.h"
#include "babl-cpuaccel.h"
#include "extensions/util.h"
#include "base/util.h"
+
#define INLINE inline
static INLINE long
-conv_rgbaF_linear_rgbAF_gamma (const Babl *conversion,unsigned char *src,
- unsigned char *dst,
+conv_rgbaF_linear_rgbAF_gamma (const Babl *conversion,unsigned char *src,
+ unsigned char *dst,
long samples)
{
+ const Babl *space = babl_conversion_get_destination_space (conversion);
+ const Babl **trc = (void*)space->space.trc;
+
float *fsrc = (float *) src;
float *fdst = (float *) dst;
int n = samples;
while (n--)
{
float alpha = fsrc[3];
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++) * alpha;
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++) * alpha;
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++) * alpha;
+ *fdst++ = _babl_trc_from_linearf (trc[0], *fsrc++) * alpha;
+ *fdst++ = _babl_trc_from_linearf (trc[1], *fsrc++) * alpha;
+ *fdst++ = _babl_trc_from_linearf (trc[2], *fsrc++) * alpha;
*fdst++ = *fsrc++;
}
return samples;
unsigned char *dst,
long samples)
{
+ const Babl *space = babl_conversion_get_destination_space (conversion);
+ const Babl **trc = (void*)space->space.trc;
+
float *fsrc = (float *) src;
float *fdst = (float *) dst;
int n = samples;
}
else if (alpha >= 1.0)
{
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++);
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++);
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++);
+ *fdst++ = _babl_trc_from_linearf (trc[0], *fsrc++);
+ *fdst++ = _babl_trc_from_linearf (trc[1], *fsrc++);
+ *fdst++ = _babl_trc_from_linearf (trc[2], *fsrc++);
*fdst++ = *fsrc++;
}
else
{
float alpha_recip = 1.0 / alpha;
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++ * alpha_recip) * alpha;
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++ * alpha_recip) * alpha;
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++ * alpha_recip) * alpha;
+ *fdst++ = _babl_trc_from_linearf (trc[0], *fsrc++ * alpha_recip) * alpha;
+ *fdst++ = _babl_trc_from_linearf (trc[1], *fsrc++ * alpha_recip) * alpha;
+ *fdst++ = _babl_trc_from_linearf (trc[2], *fsrc++ * alpha_recip) * alpha;
*fdst++ = *fsrc++;
}
}
unsigned char *dst,
long samples)
{
+ const Babl *space = babl_conversion_get_destination_space (conversion);
+ const Babl **trc = (void*)space->space.trc;
+
float *fsrc = (float *) src;
float *fdst = (float *) dst;
int n = samples;
while (n--)
{
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++);
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++);
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++);
+ *fdst++ = _babl_trc_from_linearf (trc[0], *fsrc++);
+ *fdst++ = _babl_trc_from_linearf (trc[1], *fsrc++);
+ *fdst++ = _babl_trc_from_linearf (trc[2], *fsrc++);
*fdst++ = *fsrc++;
}
return samples;
unsigned char *dst,
long samples)
{
+ const Babl *space = babl_conversion_get_destination_space (conversion);
+ const Babl **trc = (void*)space->space.trc;
float *fsrc = (float *) src;
float *fdst = (float *) dst;
int n = samples;
while (n--)
{
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++);
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++);
- *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++);
+ *fdst++ = _babl_trc_from_linearf (trc[0], *fsrc++);
+ *fdst++ = _babl_trc_from_linearf (trc[1], *fsrc++);
+ *fdst++ = _babl_trc_from_linearf (trc[2], *fsrc++);
}
return samples;
}
unsigned char *dst,
long samples)
{
+ const Babl *space = babl_conversion_get_destination_space (conversion);
+ const Babl **trc = (void*)space->space.trc;
float *fsrc = (float *) src;
float *fdst = (float *) dst;
int n = samples;
while (n--)
{
- *fdst++ = babl_gamma_2_2_to_linearf (*fsrc++);
- *fdst++ = babl_gamma_2_2_to_linearf (*fsrc++);
- *fdst++ = babl_gamma_2_2_to_linearf (*fsrc++);
+ *fdst++ = _babl_trc_to_linearf (trc[0], *fsrc++);
+ *fdst++ = _babl_trc_to_linearf (trc[1], *fsrc++);
+ *fdst++ = _babl_trc_to_linearf (trc[2], *fsrc++);
*fdst++ = *fsrc++;
}
return samples;
unsigned char *dst,
long samples)
{
+ const Babl *space = babl_conversion_get_destination_space (conversion);
+ const Babl **trc = (void*)space->space.trc;
float *fsrc = (float *) src;
float *fdst = (float *) dst;
int n = samples;
while (n--)
{
- *fdst++ = babl_gamma_2_2_to_linearf (*fsrc++);
- *fdst++ = babl_gamma_2_2_to_linearf (*fsrc++);
- *fdst++ = babl_gamma_2_2_to_linearf (*fsrc++);
+ *fdst++ = _babl_trc_to_linearf (trc[0], *fsrc++);
+ *fdst++ = _babl_trc_to_linearf (trc[1], *fsrc++);
+ *fdst++ = _babl_trc_to_linearf (trc[2], *fsrc++);
}
return samples;
}